로딩 중이에요... 🐣
[코담]
웹개발·실전 프로젝트·AI까지, 파이썬·장고의 모든것을 담아낸 강의와 개발 노트
04 데이터베이스 설정 및 모델 정의 | ✅ 편저: 코담 운영자
Django 튜토리얼 #4 - 데이터베이스 설정 및 모델 정의
🔗 소스
1. 강의 목표
- Django 모델을 정의하여 실제 데이터베이스 테이블을 생성하는 전 과정을 실습함
- 마이그레이션(migration)을 통해 데이터베이스 구조를 자동으로 반영하는 방법 학습
2. 초기 셋업
cd lesson3-MigrateSQLite3
pipenv shell
pipenv install django
- 새 프로젝트 및 앱 생성
django-admin startproject worldtour
cd worldtour
python manage.py startapp asiatoursagency
- 기존 구조와 동일하게 생성됨 (
manage.py
,settings.py
, 앱 디렉터리 등)
3. models.py - 모델 클래스 정의
from django.db import models
# 모델을 이곳에 정의합니다.
class Tour(models.Model):
# 출발 국가, 도착 국가, 숙박 일수, 여행 가격 정보를 저장합니다.
origin_country = models.CharField(max_length=64) # 출발 국가
destination_country = models.CharField(max_length=64) # 도착 국가
number_of_nights = models.IntegerField() # 숙박 일수
price = models.IntegerField() # 여행 가격
✅ 필드 설명
CharField
: 문자열 입력 필드,max_length
필수 지정 (SQL 제약조건)IntegerField
: 정수형 필드로 숙박일 수, 가격 등 숫자값 저장에 사용
✅ 역할 정리
- 이 모델은 DB 테이블
tour
로 변환됨 - 각 인스턴스는 데이터베이스의 하나의 row로 작동
- Django ORM을 통해 Create, Read, Update, Delete 모두 가능
4. settings.py - 앱 및 데이터베이스 설정 확인
✅ 앱 등록
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'asiatoursagency.apps.AsiatoursagencyConfig',
]
AsiatoursagencyConfig
는 앱 구성 클래스이며, 앱이 프로젝트에 연결되었음을 의미함
✅ 데이터베이스 설정 (SQLite3)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
- Django 기본값은 SQLite3. 실무에선 PostgreSQL 또는 MySQL로 변경 가능
✅ 언어 및 시간 설정 변경
LANGUAGE_CODE = 'ko-kr'
TIME_ZONE = 'Asia/Seoul'
- 국제화 설정을 한국 기준으로 변경 (기본값: 'en-us', 'UTC')
5. makemigrations 실행
python manage.py makemigrations
migrations/0001_initial.py
파일이 자동 생성됨- 해당 파일에는 모델에 기반한 테이블 스키마가 담김
🔍 생성된 마이그레이션 코드 예시
class Migration(migrations.Migration):
initial = True
dependencies = []
operations = [
migrations.CreateModel(
name='Tour',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('origin_country', models.CharField(max_length=64)),
('destination_country', models.CharField(max_length=64)),
('number_of_nights', models.IntegerField()),
('price', models.IntegerField()),
],
),
]
id
필드는 자동 생성됨 (AutoField, primary key)
6. migrate 실행 (DB 반영)
python manage.py migrate
- 실제 SQLite3 데이터베이스에 테이블 생성됨
- 테이블:
asiatoursagency_tour
생성됨 - 기타: admin, auth, contenttypes, sessions 관련 테이블도 함께 생성됨
디렉터리 구조 확인
lesson4-MigrateSQLite3/
├── worldtour/
│ ├── asiatoursagency/
│ │ ├── migrations/
│ │ │ └── __init__.py
│ │ ├── admin.py
│ │ ├── apps.py
│ │ ├── models.py
│ │ ├── tests.py
│ │ ├── urls.py
│ │ └── views.py
│ ├── worldtour/
│ │ ├── __init__.py
│ │ ├── asgi.py
│ │ ├── settings.py
│ │ ├── urls.py
│ │ └── wsgi.py
│ ├── db.sqlite3
│ ├── manage.py
├── Pipfile
├── Pipfile.lock
다음 강의 예고
- Django shell을 이용한 데이터 추가 및 조회 실습 예정